package IU_Admin;

import datos.GuardarDatos;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.MessageFormat;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class IU_Tabla<T> extends JFrame{
    private Object[][] data;
    private TableRowSorter<TableModel> modeloOrdenado;
    
    public IU_Tabla(ArrayList<T> lista){
        JFrame v = new JFrame("Listado");    
        final DefaultTableModel modelo = new datos.TableModel(lista).getModelo();
        final JTable tabla = new JTable(modelo);
        
        
        JMenu menuArchivo = new JMenu("Archivo");
        menuArchivo.setMnemonic('A');
        JMenuItem exportar = new JMenuItem("Exportar Listado");
        exportar.setMnemonic('E');

        exportar.addActionListener(
            new ActionListener() {
                @Override
                public void actionPerformed( ActionEvent evento )
                {    
                    guardarModeloEnFichero(modelo);
                }
            }          
        );
        
        JMenuItem imprimir = new JMenuItem("Imprimir");
        imprimir.setMnemonic('I');
        imprimir.addActionListener(
            new ActionListener() {
                @Override
                public void actionPerformed( ActionEvent evento )
                {
                        MessageFormat encabezado = new MessageFormat("Page {0,number,integer}");
                        try {
                            tabla.print(JTable.PrintMode.FIT_WIDTH, encabezado, null);
                        } catch (java.awt.print.PrinterException e) {
                            System.err.format("No se puede imprimir %s%n", e.getMessage());
                        }
                }
            }          
        );
        
        menuArchivo.add(exportar);
        menuArchivo.add(imprimir);
        JMenuBar barra = new JMenuBar();  
        setJMenuBar( barra );  
        barra.add( menuArchivo ); 
        v.setJMenuBar(barra);
        
        modeloOrdenado = new TableRowSorter<TableModel>(modelo);
        tabla.setRowSorter(modeloOrdenado);
        tabla.setEnabled(false);
        JScrollPane scroll = new JScrollPane(tabla);
        v.getContentPane().add(scroll);
        v.pack();
        v.setVisible(true);
        v.setAlwaysOnTop(true);
        v.setAlwaysOnTop(false);
    }
   
    private void guardarModeloEnFichero(DefaultTableModel modelo){
        JFileChooser fc = new JFileChooser();
        int returnVal = fc.showSaveDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            String path = file.getAbsolutePath();
            ArrayList<String> salida = new ArrayList<>();
            String linea = "";
            for(int i=0;i<=modelo.getRowCount()-1;i++){
                for(int j=0;j<=modelo.getColumnCount()-1;j++){
                    linea += modelo.getValueAt(i, j) + ";";
                }
                salida.add(linea);
                linea = "";
            }
            GuardarDatos gd = new GuardarDatos();
            //Guardamos el fichero con extension 'csv' (comma-separated values)
            //para facilitar su manejo en editores de hojas de calcilo
            gd.GuardarTextoPlano(salida, path+".csv");
        }
    }   
}
